# # 分析：这种解决方案中，出错的异常处理放在了函数内部，不灵活，外界也没法修改异常处理，因为在函数内部都定死了
# def check_name(name):
#     if name.find("朱") >= 0:
#         print("不能取国姓")
#
# def check_age(age):
#     if age < 18:
#         print("未成年")
#
# check_name("朱重八")
# check_age(10)


# # 改进：
# # 思想：1. 错误集中处理
# #       2. 错误处理暴露给外部处理
# def check_name(name):
#     if name.find("朱") >= 0:
#         raise ValueError("姓错误")
#
# def check_age(age):
#     if age < 18:
#         raise ValueError("年龄错误")
#
# try:
#     check_name("🐖重八")
#     check_age(19)
#
# except ValueError as e:
#     print("%s" % str(e))


# 改进：
class NameIsError(Exception):
    pass

class AgeIsError(Exception):
    pass

def check_name(name):
    if name.find("朱") >= 0:
        raise NameIsError("姓错误")

def check_age(age):
    if age < 18:
        raise AgeIsError("年龄错误")

try:
    check_name("🐖重八")
    check_age(10)

except NameIsError as e:
    print("错误类型1：%s" % str(e))
except AgeIsError as e:
    print("错误类型2：%s" % str(e))
